Currently, software performance optimizations at a macroscopic level may be done manually, such as by a software developer. Additionally, optimizations may be done at a lower level through a software compiler during translation of high level code to machine code. However, existing runtime optimizations may be limited to rationalization of resource usage and may not modify internal program or workflow structures.
Existing methods for runtime optimization, by being restricted to operating at a level specified by a designer, may inhibit self-optimization. Runtime parallelization techniques that are applied as a result of static decisions at design time, or limited to component levels, may fail to include considerations such as a runtime load, or resource availability, in their optimization routines. That is, generally, static decisions or initial design choices at design time may not be overridden at runtime on the basis of a runtime system resource snapshot, thereby impeding self-optimization.
Accordingly, there is a need for systems and method for optimizing the performance of software applications at runtime that take the above factors into consideration.